// srq.cpp : Defines the entry point for the console application.
//
#include
#include
#include
#include "visa.h"
ViStatus _VI_FUNCH ServiceReqEventHandler(ViSession vi, ViEventType eventType, ViEvent event, ViAddr userHandle)
{
printf("srq occurred\n");
return VI_SUCCESS;
}
int main(int argc, char* argv[])
{
ViSession rm, vi;
ViStatus status;
char string[256];
ViUInt32 retCnt;
status = viOpenDefaultRM(&rm);
if (status < VI_SUCCESS) goto error;
status = viOpen(rm, "GPIB8::1::INSTR", NULL, NULL, &vi);
if (status < VI_SUCCESS) goto error;
// Setup and enable event handler
status = viInstallHandler(vi, VI_EVENT_SERVICE_REQ, ServiceReqEventHandler, NULL);
if (status < VI_SUCCESS) goto error;
status = viEnableEvent(vi, VI_EVENT_SERVICE_REQ, VI_HNDLR, VI_NULL);
if (status < VI_SUCCESS) goto error;
// Setup instrument
status = viWrite(vi, (ViBuf) ":RECALL:SETUP FACTORY", 21, &retCnt);
if (status < VI_SUCCESS) goto error;
status = viWrite(vi, (ViBuf) ":SELECT:CH1 1;CH2 0;CH3 0;CH4 0", 31, &retCnt);
if (status < VI_SUCCESS) goto error;
status = viWrite(vi, (ViBuf) ":DATA:ENCDG RIBINARY;SOURCE CH1;START 1;STOP 500;WIDTH 2", 56, &retCnt);
if (status < VI_SUCCESS) goto error;
status = viWrite(vi, (ViBuf) ":ACQUIRE:STOPAFTER SEQUENCE;REPET 0;STATE 0;MODE SAMPLE", 55, &retCnt);
if (status < VI_SUCCESS) goto error;
status = viWrite(vi, (ViBuf) "DESE 1;*ESE 1;*SRE 32", 21, &retCnt);
if (status < VI_SUCCESS) goto error;
// Do a single acq
status = viWrite(vi, (ViBuf) "*CLS", 4, &retCnt);
if (status < VI_SUCCESS) goto error;
status = viWrite(vi, (ViBuf) ":ACQUIRE:STATE 1", 16, &retCnt);
if (status < VI_SUCCESS) goto error;
status = viWrite(vi, (ViBuf) "*OPC", 4, &retCnt);
if (status < VI_SUCCESS) goto error;
// Wait around long enough for srq event to occur
::Sleep(10000);
// Cleanup and exit
status = viDisableEvent(vi, VI_EVENT_SERVICE_REQ, VI_HNDLR);
if (status < VI_SUCCESS) goto error;
status = viUninstallHandler(vi, VI_EVENT_SERVICE_REQ, ServiceReqEventHandler, NULL);
if (status < VI_SUCCESS) goto error;
viClose(vi);
viClose(rm);
return 0;
error:
viStatusDesc(rm, status, string);
fprintf(stderr, "Error: %s\n", (ViBuf) string);
return 0;
}